package edu.ccut.saturn.component;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * 记录了数据组件的信息。数据组件的信息包括命名空间、名称、数据属性信息、
 * 使用的数据库连接名称、描述信息、数据组件的全局键值、生成数据属性所使用的sql语句。
 * <p>一共有两种类型的数据组件，数据项和查询类型数据实体。其中查询类型数据实体是通过sql语句生成的，通过getSqlStr()方法可以获得sql语句。
 * 
 * @author 谷钰
 * @version 1.0 2008.9.09
 * 
 * @see IDataItem
 */
public interface IDataInfo extends XmlSerializable {

	public static final String KEY_SEPARATOR = "::";
	
	public static final String DATABASE_DRIVER_TYPE_ORACLE = "oracle";

	public static final String DATABASE_DRIVER_TYPE_DB2 = "db2";
	
	public static final String DATABASE_DRIVER_TYPE_SQLSERVER = "sqlserver";
	
	public static final String DATABASE_DRIVER_TYPE_MYSQL = "mysql";
	
	public static final String DATABASE_DRIVER_TYPE_NONE = "none";
	
	/**
	 * 获得数据组件的命名空间
	 * 
	 * @return
	 */
	public String getSpace();

	/**
	 * 获得数据组件的名称
	 * 
	 * @return
	 */
	public String getType();

	/**
	 * 获得数据组件的属性信息
	 * 
	 * @param name
	 * @return
	 */
	public IDataItem getDataItem(String name);

	/**
	 * 添加数据组件的属性信息
	 * 
	 * @param dataItem
	 */
	public void addDataItem(IDataItem dataItem);

	/**
	 * 获得所有属性的属性键值
	 * 
	 * @return
	 */
	public Set<String> keySet();
	
	/**
	 * 获得所有属性值
	 * @return
	 */
	public Collection<IDataItem> values();
	
	/**
	 * 获得数据组件使用的连接的名称
	 * 
	 * @return
	 */
	public String getConnectionName();

	/**
	 * 获得描述信息
	 * @return
	 */
	public String getDescription();

	/**
	 * 获得数据组件的全局键值
	 * @return
	 */
	public String getDataFullKey();

	/**
	 * 获得生成查询类型数据实体的sql语句
	 * 
	 * @return
	 */
	public String getSqlStr();
	
	/**
	 * 根据id获得待执行的sql语句;如果指定的id没有对应的sql语句则返回null对象。
	 * 
	 * @param id
	 * @return
	 * @throws Exception 
	 */
	public String getSqlById(String id, Map<String, Object> paramMap) throws Exception;

	/**
	 * 获得数据项
	 * @return
	 */
	public String getDBType();
}